﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
// inclusiones propias
using System.Collections.Generic;
using GCon; // Usa los contenedores de objetos
using GVis; // Tramita los contenedores a traves de visualizadores
using GMan; // Invoca al manejador de permisos de operaciones


public partial class Visualizador_Alumno : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
              _datos = new Vis_Alumno();
              _permisos = new Manejador();
              _opciones = new List<string>();
              // quiz de la cuestion de paremetros.
              _readOnly = true;
              
           
              _opcionesMenu = new List<string>();
              _opcionesTool = new List<string>();
              _numOpcionesMenu = NUM_OPCIONES_MENU;
              _numOpcionesTool = NUM_OPCIONES_TOOL;


              //Page.Master.LoadControl("idCtrlMenu").DataBind();
              //Page.Master.LoadControl("~/App_Interface/Controles/CtrlHerramientas.ascx");
              //Page.Master.LoadControl("~/App_Interface/Controles/CtrlMenu.ascx");



              ContentPlaceHolder ContentCuerpo;//, ContentHerra, ContentContenidos;
              Content _herra;
              TextBox mpTextBox;
              ContentCuerpo = (ContentPlaceHolder)Master.FindControl("idCntnCuerpo");
              if (ContentCuerpo != null)
              {
                 _herra = (Content)ContentCuerpo.FindControl("idCtrlHerramientas");
                 if (_herra != null)
                 {
                    //CtrlHerramientas uno = (CtrlHerramientas)parametrizador.FindControl("idCtrlHerramientas");
                    //uno.setEstaOculto(true);

                 }
              }

              // Inicializacion de elementos para evitar null pointers
              //Master.InicializaElementos();

              //Master.getHerramientas().setEstaOculto(true);

              // Codigo de construccion
              if (_debug)
              {
                 Con_Alumno uno = new Con_Alumno("1", "pedro", "martinez", "campos", "4325699M", "Ninguna", "29922", "uno@una.es", "Info", "In2", "3", "4", "6", "7", "8", "9", "0", "3", "3", "12", "º1", "ññ", "12", "123", "123", "123", "123", "123", "", "", "");

                 // probar equals...
                 _datos.setObjeto(new Con_Alumno(uno));
                 //int prueba = this.Controls.Count;
                 //this.LoadControl("~/App_Interface/Controles/CtrlHerramientas.ascx");
                 //this.LoadControl("~/App_Interface/Controles/CtrlMenu.ascx");
                 // Duda de Orientación a objetos...
                 //_interfaz.getHerramientas().setOpciones(this._opcionesTool, _numOpcionesTool);

                 this.DaValoresDebug();

                 /* Tiene que ir
                  // inicializo el contenido de herrramientas
                   _interfaz.getHerramientas().setOpciones(_opcionesTool, _numOpcionesTool);
                  // inicializo el contenido del menu
                  _interfaz.getMenu().setOpcionesMenu(_opcionesMenu, _numOpcionesMenu);
                  _interfaz.getMenu().setOpciones(_opcionesMenu, _numOpcionesMenu);
                  // Mostramos los datos por pantalla
                  * */

              }
              Actualiza();
              //Session.Add("idVisorAlumno", this);         


            
        }
   /// <summary>
   /// Método que se invoca asociado al boton de cambiar fotografia del alumno
   /// </summary>
   /// <param name="sender"></param>
   /// <param name="e"></param>
        public void BotonCambiaFoto ( object sender, EventArgs e )
        {
           /* Solo se pondra cambiar la foto en el caso en el que el visualizador se encuentre en modo edición
            * */
           if (!_readOnly)
           {
              // contenido del metodo
              ;
           }
        }
   /// <summary>
   /// Metodo de actualización de contenidos del visualizador
   /// </summary>
        protected void Actualiza()
        {
            if (_readOnly)
            {
                // Si el visualizador esta en modo lectura vemos el contenido de las etiquetas de entrada id_In*
               LeeDatos();
            }
            else
            {
                // Si el visualizador esta en modo escritura vemos el contenido de las etiquetas de entrada id_Out*
                EscribeDatos();
            }
        }
   /// <summary>
        ///  Si el formulario es de edición este metodo trata de leer todos los campos introducidos en los inputs de
        ///  la interfaz.
        /// </summary>
        public void EscribeDatos ()
        {
            if (!_readOnly)
            {
               /* Tiene que ir
                this.getAlumno().Set_NOMBRE( this.id_In_Nombre.Value.ToString());
                * */
                //this.getAlumno().Set_APELLIDO1(id_In_Apellido_1.getValue().ToString());
                //this.getAlumno().Set_APELLIDO2(id_In_Apellido_2.getValue().ToString());
                ///... Cuando funcione metere el resto de campos
            }
        }
   /// <summary>
        /// Si el formulario es de lectura, este metodo muestra en los campos el objeto recuperado de la BBDD
        /// para su visualización
        /// </summary>
        public void LeeDatos()
        {
           /* Intentamos leer los datos de la base de datos para mostrarlos en la interfaz
            * */
            
            try
            {
               // Cada uno de los campos no tiene por que ser obligatorio lo comprobaremos con un if , y asi afinamos en la posible excepción
               /*
               if (this.getAlumno().Get_ID_PK() != null)
               {
                  // Campo que contiene el id asignado por la base de datos 
                  id_Out_Nombre.Text = this.getAlumno().Get_ID_PK().ToString();
                  // los de lectura si los pilla , es un cachondo.
                  this.id_In_Nombre.Dispose();
               }
               if (this.getAlumno().Get_NUM_MATRICULA() != null)
               {
                  // Contiene el numero de matricula asociado 
                  this.id_Out_Matricula.Text = this.getAlumno().Get_NUM_MATRICULA().ToString();
               }
               if (this.getAlumno().Get_NOMBRE() != null)
               {
                  // Contiene el nombre del alumno
                  this.id_Out_Nombre.Text = this.getAlumno().Get_NOMBRE().ToString();
               }
               if (this.getAlumno().Get_APELLIDO1() != null)
               {
                  // Contiene el primer apellido del alumno
                  this.id_Out_Apellido_1.Text = this.getAlumno().Get_APELLIDO1().ToString();
               }
               if (this.getAlumno().Get_APELLIDO2() != null)
               {
                  // Contiene el segundo apellido del alumno 
                  
                  this.id_Out_Apellido_2.Text = this.getAlumno().Get_APELLIDO2().ToString();
               }
               if (this.getAlumno().Get_DIRECCION() != null)
               {
                  // Contiene la direcion de residencia facilitada por el alumno
                  this.id_Out_Direccion.Text = this.getAlumno().Get_DIRECCION().ToString();
               }
               if (this.getAlumno().Get_NIF() != null)
               {
                  // Contiene el campo NIF del alumno e indistintamente DNI 
                  this.id_Out_Nif.Text = this.getAlumno().Get_NIF().ToString();
               }
               if (this.getAlumno().Get_MAIL() != null)
               {
                  // Contiene el campo Email del alumno
                  this.id_Out_Email.Text = this.getAlumno().Get_MAIL().ToString();
               }
               // Campo con DUDA...
               if (this.getAlumno().Get_ESTADO_ALUMNO_ID_PK() != null)
               {
                  // Contiene el ...¿?¿?
                  this.id_Out_Estado.Text = this.getAlumno().Get_ESTADO_ALUMNO_ID_PK().ToString();
               }
               if (this.getAlumno().Get_FECHA_CREACION() != null)
               {
                  // Campo que incluye la fecha de creacion del alumno
                  this.id_Out_Fecha_Creacion.Text = this.getAlumno().Get_FECHA_CREACION().ToString();
               }
               if (this.getAlumno().Get_FECHA_NACIMIENTO() != null)
               {
                  // Campo que incluye la fecha de creacion del alumno
                  this.id_Out_FechaNac.Text = this.getAlumno().Get_FECHA_NACIMIENTO().ToString();
               }
               if (this.getAlumno().Get_NACIONALIDAD_ID_PK() != null)
               {
                  // Campo que incluye la fecha de creacion del alumnos
                  this.id_Out_Nacionalidad.Text = this.getAlumno().Get_NACIONALIDAD_ID_PK().ToString();
               }
               if (this.getAlumno().Get_NACIONALIDAD_ID_PK() != null)
               {
                  // Campo que incluye la fecha de creacion del alumnos
                  this.id_Out_Nombre.Text = this.getAlumno().Get_NOMBRE().ToString();
               }
               if (this.getAlumno().Get_NACIONALIDAD_ID_PK() != null)
               {
                  // Campo que incluye la fecha de creacion del alumnos
                  this.id_Out_Nombre.Visible = true;
               }
               if (this.getAlumno().Get_NACIONALIDAD_ID_PK() != null)
               {
                  // Campo que incluye la fecha de creacion del alumnos
                  this.id_Out_Observaciones.Text = this.getAlumno().Get_OBSERVACIONES().ToString();
               }
               if (this.getAlumno().Get_NACIONALIDAD_ID_PK() != null)
               {
                  // Campo que incluye la fecha de creacion del alumnos
                  this.id_Out_Provincia.Text = this.getAlumno().Get_PROVINCIA_ID_PK().ToString();
               }
               if (this.getAlumno().Get_NACIONALIDAD_ID_PK() != null)
               {
                  // Campo que incluye la fecha de creacion del alumnos
                  this.id_Out_Telefono_1.Text = this.getAlumno().Get_TLF1().ToString();
               }
               if (this.getAlumno().Get_NACIONALIDAD_ID_PK() != null)
               {
                  // Campo que incluye la fecha de creacion del alumnos
                  this.id_Out_Telefono_Auxiliar.Text = this.getAlumno().Get_TLF2().ToString();
               }
               if (this.getAlumno().Get_NACIONALIDAD_ID_PK() != null)
               {
                  // Campo que incluye la fecha de creacion del alumnos
                  this.id_Out_Tutor.Text = this.getAlumno().Get_TRABAJO_ACTUAL();
               }
               // Por si acaso no existe precalculada
               if (this.getAlumno().Get_NACIONALIDAD_ID_PK() != null)
               {
                  DateTime edad = new DateTime();
                  DateTime.TryParse(this.getAlumno().Get_FECHA_NACIMIENTO(), out edad);
                  this.id_Out_Edad.Text = (edad.Year).ToString();
                  // Campo que incluye la fecha de creacion del alumnos
                  // System.DateTime.Now - 
               }
               if (this.getAlumno().Get_NACIONALIDAD_ID_PK() != null)
               {
                  //
                  this.id_Out_Ingles.Text = this.getAlumno().Get_INGLES().ToString();
               }
               if (this.getAlumno().Get_NACIONALIDAD_ID_PK() != null)
               {
                  //
                  this.id_Out_Matricula.Text = this.getAlumno().Get_NUM_MATRICULA().ToString();
               }
               if (this.getAlumno().Get_NACIONALIDAD_ID_PK() != null)
               {
                  this.id_Out_Informatica.Text = this.getAlumno().Get_INFORMATICA().ToString();
               }
               


            //id_Text_Grup.InnerText= _datos.getGrupo () Duda;
            /*
            // Profesor
            if (User.IsInRole("Profesor")) //(Request.Params.Get("USUARIO") != null))
            {
                
                id_Text_FechaObservacion.InnerText = _datos.Get_OBSERVACIONES_DOCENCIA();
                // id_Text_Faltas = _datos.get_as
                
            }
            // observaciones docencia profesores si secretaria no


            // Secretaria
            // Ve informacion de matricula
            if (User.IsInRole("Secretaria"))
            {
               
                id_Text_Observaciones.InnerText = _datos.Get_OBSERVACIONES();
                id_Text_AltaBolsa.InnerText = _datos.Get_ALTA_BOLSA_EMPLEO();
                id_Text_Comercial.InnerText = _datos.Ge_COMERCIAL_ID_PK();
                id_Text_Tomador.InnerText = _datos.Get_TOMADOR_ID_PK();
              
            }
             * */
            

            }
            catch (Exception)
            {
               // De momento mientras afinamos
                throw new NotSupportedException ();
            }
        }
   /// <summary>
        /// Indica si el formulario esta en modo lectura o escritura
        /// </summary>
        /// <returns></returns>
        public bool isReadOnly()
        {
            return _readOnly;
        }
   /// <summary>
        /// Pone si el formulario esta en modo lectura o escritura
        /// 
        /// </summary>
        /// <param name="parametro"></param>
        public void setIsReadOnly (bool parametro)
        {
            _readOnly = parametro;
        }
   /// <summary>
   /// Metodo diseñado para sin ayuda de parametros alternar entre los dos modos de edicion de la pagina cuya
   /// utilidad destaca en la interfaz.
   /// </summary>
   /// <param name="sender"></param>
   /// <param name="e"></param>
        public void cambiaModoLectura ( object sender, EventArgs e )
        {
           

           if (_readOnly == true)
           {
              _readOnly = false;
              //Session.Add("_readOnly", false);
           }
           else
           {
              _readOnly = true;
              //Session.Add("_readOnly", true);
           }

        }
   /// <summary>
        /// Cambiamos los datos del alumno con tipo contenedor de alumno
        /// </summary>
        public void setAlumno(Con_Alumno uno)
        {
            // control de permisos
            _datos.setObjeto(uno);
        }
   /// <summary>
        /// Obtenemos los datos del alumno actual
        /// </summary>
        public Con_Alumno getAlumno()
        {
            return (Con_Alumno) _datos.getObjeto();
        }
   /// <summary>
        /// Da valores por defecto a los contenedores mientras estamos en debug
        /// </summary>
        private void DaValoresDebug()
        {
            if (_debug)
            {
                //Mientras depuro le doy esto valores
                _numOpcionesMenu = NUM_OPCIONES_MENU;
                try
                {
                    for (int i = 0; i < NUM_OPCIONES_MENU; i++)
                    {
                        _opcionesMenu.Add(_porDefectoMenu[i].ToString());
                    }

                //Mientras depuro le doy esto valores
                _numOpcionesTool = NUM_OPCIONES_TOOL;

                    for (int i = 0; i < NUM_OPCIONES_MENU; i++)
                    {
                        _opcionesTool.Add(_porDefectoTool[i].ToString());
                    }
                }
                catch
                {
                    throw new NotImplementedException();
                }
            }
        }
   /// <summary>
   /// Metodo esbozado con el cual se van a filtrar todos los permisos y las politicas de seguridad
   /// </summary>
   /// <returns></returns>
        public Manejador getManejador()
        {
            return _permisos;
        }
   /* 
    * Parte de atributos privados del controlador
    * */
   /// <summary>
   /// Objeto que gestiona los permisos del usuario sobre el objeto
   /// </summary>
        private Manejador _permisos;
   /// <summary>
   /// Contiene los datos del objeto que se procesa en el visualizador
   /// <summary>
        private Vis_Alumno _datos;
   /// <summary>
   /// Variable que discrimina codigo estrictamente de construccion
   /// </summary>
        public static bool _debug = true;
   /// <summary>
   /// Lista con la opciones que se manejaran en la barra de herramientas, con el futuro se quitará
   /// <summary> 
        private List<String> _opciones;
   /// <summary>
   /// Atributo booleano que fija el modo de editabilidad de la pagina
   /// </summary>
        private bool _readOnly;
   /// <summary>
   /// Numero de opciones efectivas para el menu
   /// </summary> 
        private int _numOpcionesMenu;
   /// <summary>
        /// Contenido en cadenas de dichas opciones de menu
        /// </summary>
        private List<String> _opcionesMenu;
   /// <summary>
   /// Contenido por defecto para la depuracion del menu
   /// </summary>
        private static string[] _porDefectoMenu = { "Sesion", "Estadisticas", "Salir", "Usuarios", "Configuración" };
   /// <summary>
        /// Numero por defecto de opciones para el menu
        /// </summary>
        private const int NUM_OPCIONES_MENU = 5;
        /// <summary>
        /// Numero de opciones efectivas para la barra de herramientas
        /// </summary>
        private int _numOpcionesTool;
        /// <summary>
        /// Contenido en cadenas de dichas herramientas
        /// </summary>
        private List<String> _opcionesTool;
        /// <summary>
        /// Contenido por defecto para la depuracion de herramientas
        /// </summary>
        private static string[] _porDefectoTool = { "Modificar", "Borrar", "Actualizar", "Otra1", "Otra" };
        /// <summary>
        /// Número por defecto de opciones para el menu
        /// </summary>
        private const int NUM_OPCIONES_TOOL = 5;
        /// <summary>
        /// Vista
        /// </summary>
        //private PaginaMaestra _interfaz;
}

